/**
 * Biblioteca Ajax
 * 2015-02-01
 * 
 * @author Jannsen Brauer
 *  
 */

/* Variáveis que serão utilizadas na criação do Objeto, requisição e envio de dados(se existirem)*/
var ajax;
var dadosUsuario;

/**
 * Cria o Objeto e faz a requisição. Tenta instanciar o objeto XMLHttpRequest e, se conseguir, 
 * chama a função que fará a requisição, passando a ela o dados fornecidos pelo usuário.
 * 
 * 2015-02-01
 * @author Jannsen Brauer
 * @param tipo //POST ou GET
 * @param url // Arquivo que irá buscar a resposta no servidor
 * @param assinc // Requisição sincrona(False) ou assincrona(true)
 */
function requisicaoHTTP(tipo,url,assinc){
    if (window.XMLHttpRequest)
    {      // Mozilla, Safari,...
        ajax = new XMLHttpRequest();
    } 
    else if (window.ActiveXObject)
    {    // IE
        ajax = new ActiveXObject("Msxml2.XMLHTTP");
        if (!ajax) 
        {
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    
    if (ajax)    // iniciou com sucesso
    {
        iniciaRequisicao(tipo,url,assinc);
    }
    else
    {
        alert("Seu navegador n�o possui suporte a essa aplica��o!");
    }
}

/**
 * Inicializa o Objeto criado e envia os dados (se existirem). Recebe os dados da função
 * requisicaoHTTP e processa a requisição, alem de definir a função que irá tratar a 
 * resposta do servidor.
 * 
 * 2015-02-01
 * @author Jannsen Brauer
 * @param tipo
 * @param url
 * @param bool
 */
function iniciaRequisicao(tipo,url,bool){
    ajax.onreadystatechange=trataResposta;
    ajax.open(tipo,url,bool);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    //ajax.overrideMimeType("text/XML");   /* usado somente no Mozilla */
    ajax.send(dadosUsuario);
}


/**
 * Inicia requisição com envio de dados. Faz uma requisição definindo antes os dados a serem enviados,
 * que, no caso, são obtidos de um formulario HTML. Caso não haja dados a serem enviados, podemos
 * chamar diretamente a função requisicaoHTTP.
 * 
 * 2015-02-01
 * @author Jannsen Brauer
 * @param url
 */
function enviaDados(url){
    criaQueryString();
    requisicaoHTTP("POST",url,true);
}


/**
 *  Cria a String a ser enviada, formato campo1=valor1&campo=valor2&campo3=valor3&.........
 *  Coloca os dados do formulário em uma queryString para que o servidos possa
 *  identificar os pares nome/valor
 *  
 *  2015-02-01
 *  @author Jannsen Brauer
 */
function criaQueryString(){
    dadosUsuario="";
    /**
     * frm abreviação de formulario
     * O document.forms[0] considera somente o primeiro formulario da pagina.
     * caso tenha vários formulários na pagina deverá ser indicado o formulário
     * desejado da seguinte forma
     * 
     * var frm = document.getElementByld("Id do forme que deseja");
     */
//    var frm = document.forms[0];
    var frm = document.getElementById("formAjax");
    var numElementos =  frm.elements.length;
    for (var i = 0; i < numElementos; i++)
    {
        if (i < numElementos-1)
        {
            dadosUsuario += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&";
        }
        else
        {
            dadosUsuario += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value);
        }
    }
}

/**
 * Trata a resposta do servidor.
 * Verifica se a requisição foi concluida e inicia o tratamento dos dados.
 * Hà uma referencia para a função trataDados(), que deverár ser criada no
 * programa para realizar o tratamento desejado sobre os dados retornados
 * pelo servidor.
 * 
 * 2015-02-01
 * @author Jannsen Brauer
 */
function trataResposta(){
    if (ajax.readyState == 4)
    {
        if(ajax.status == 200)
        {
            trataDados();  // criar essa fun��o no seu programa
        }
        else
        {
            alert("Problema na comunica��o com o objeto XMLHttpRequest.");
        }
    }
}
